home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / gfx / opal / devdocs.lha / Examples / Demo.c < prev    next >
C/C++ Source or Header  |  1993-05-04  |  4KB  |  183 lines

  1. /* A simple test/demo for the opal.library.
  2.  * Written by Martin Boyd, Opalvision Australia.
  3.  */
  4.  
  5.  
  6. #include "opal/opallib.h"
  7. #include "stdlib.h"
  8. #include "stdio.h"
  9. #include "clib/macros.h"
  10.  
  11. #ifndef    AZTEC_C
  12. #include <proto/all.h>
  13. #endif
  14.  
  15. struct OpalBase *OpalBase;
  16. struct OpalScreen *OScrn;
  17.  
  18. char FileName1[30];
  19. char FileName2[30];
  20.  
  21. void Stencil_Square (int x,int y,int w,int h);
  22.  
  23. void main (int argc,char *argv[])
  24. {
  25.    register int x,y;
  26.    register long i,j,k;
  27.    int XSquares,YSquares;
  28.    long Err,PixelsLeft,SquaresLeft;
  29.  
  30.  
  31.     OpalBase = (struct OpalBase *) OpenLibrary ("opal.library",0L);
  32.     if (OpalBase==0L)
  33.         { printf ("Can't open opal.library\n");
  34.           exit (0);
  35.         }
  36.  
  37.     printf ("For this demo I will need 2 lo-res, non-interlaced  images..\n");
  38.     printf ("FileName of Image1:");
  39.     fflush (stdout);
  40.     scanf ("%s", FileName1);
  41.     printf ("FileName of Image2:");
  42.     fflush (stdout);
  43.     scanf ("%s", FileName2);
  44.  
  45.     Err = LoadImage24 (NULL,FileName1,FORCE24);
  46.     if (Err < OL_ERR_MAXERR)
  47.         { printf ("Error loading file!!");
  48.           CloseLibrary ((struct Library *)OpalBase);
  49.           exit (10);
  50.         }
  51.  
  52. /* Start with frame 1 and put second image in frame 0. This enables
  53.  * the playfield stencil (which is in frame 0) to be changed
  54.  * later on
  55.  */
  56.  
  57.     OScrn = (struct OpalScreen *)Err;
  58.     WriteFrame24 (1);
  59.     DisplayFrame24 (1);
  60.     RegWait24 ();
  61.     PaletteMap24 (TRUE);
  62.     RegWait24 ();
  63.     OScrn->PixelReadMask = 0;    /* Clear Pixel Read Mask so that */
  64.     UpdateRegs24();            /* update will not be visible. */
  65.     RegWait24();
  66.     Refresh24();            /* Write image into frame buffer */
  67.     AutoSync24 (TRUE);
  68.     OScrn->PixelReadMask = 0xff;    /* Reset pixel read mask     */
  69.     FadeIn24 (200L);        /* Fade 'er in            */
  70.  
  71.     for (i=0; i<OScrn->Modulo; i++)        /* do a bit of scrolling    */
  72.         Scroll24 (1L,0L);
  73.     for (i=0; i<OScrn->Modulo; i++)
  74.         Scroll24 (-1L,0L);
  75.  
  76.     Delay (25L);
  77.  
  78.     j = MIN (OScrn->Height,OScrn->LastCoProIns);
  79.     for (; j>0; j--)
  80.         { OScrn->AddressReg = OScrn->Modulo*j + 3;
  81.           for (i=0; i<j; i++)
  82.             OScrn->CoProData[i] &= ~ADDLOAD;
  83.           for (i=j; i<OScrn->LastCoProIns; i++)
  84.             OScrn->CoProData[i] |= ADDLOAD;
  85.           RegWait24();
  86.           UpdateCoPro24 ();
  87.         }
  88.     Delay (25L);
  89.  
  90.     for (j=1; j<OScrn->LastCoProIns; j++)
  91.         { OScrn->AddressReg = OScrn->Modulo*j + 3;
  92.           for (i=0; i<OScrn->LastCoProIns; i++)
  93.             OScrn->CoProData[i] |= ADDLOAD;
  94.           for (i=j; i<OScrn->LastCoProIns; i=i+j)
  95.             OScrn->CoProData[i] &= ~ADDLOAD;
  96.           RegWait24();
  97.           UpdateCoPro24 ();
  98.         }
  99.     OScrn->AddressReg = 0;
  100.     SetLoadAddress24();
  101.     RegWait24 ();
  102.  
  103. /* Now load the second image into frame 0.
  104.  */
  105.  
  106.     WriteFrame24 (0);
  107.     DisplayFrame24 (0);
  108.     Err = LoadImage24 (OScrn,FileName2,FORCE24);
  109.     if (Err < OL_ERR_MAXERR)
  110.         { printf ("Error loading file!!");
  111.           CloseScreen24 ();
  112.           CloseLibrary ((struct Library *)OpalBase);
  113.           exit (10);
  114.         }
  115.     Refresh24();
  116.     Delay (50L);
  117.     ClearPFStencil24 (OScrn);
  118.     UpdatePFStencil24 ();
  119.     UpdateDelay24 (0L);
  120.     Delay (1L);
  121.     DualPlayField24 ();
  122.  
  123.     OScrn->Pen_R = 1;
  124.  
  125.     XSquares = (OScrn->Width+15)/16;
  126.     YSquares = (OScrn->Height+15)/16;
  127.     srand (12345678L);
  128.     SquaresLeft = XSquares*YSquares;
  129.     while (SquaresLeft)
  130.         { x = ((float)rand () * XSquares)/RAND_MAX;
  131.           y = ((float)rand () * YSquares)/RAND_MAX;
  132.           x = x * 16;
  133.           y = y * 16;
  134.           if (!ReadPFPixel24 (OScrn,x,y))
  135.             { SquaresLeft--;
  136.               Stencil_Square (x,y,16,16);
  137.             }
  138.         }
  139.  
  140.     OScrn->Pen_R = 0;
  141.     PixelsLeft = (long)OScrn->Width * OScrn->Height;
  142.     for (j=0; j<10; j++)
  143.         for (i=0; i<30000; i++)
  144.             { x = ((float)rand () * OScrn->Width)/RAND_MAX;
  145.               y = ((float)rand () * OScrn->Height)/RAND_MAX;
  146.               if (ReadPFPixel24 (OScrn,x,y))
  147.                 { PixelsLeft--;
  148.                   WritePFPixel24 (OScrn,x,y);
  149.                 }
  150.             }
  151.  
  152.     OScrn->Pen_R = 1;
  153.     for (k=0; k<YSquares/2; k++)
  154.         { for (i=0; i<XSquares; i++)
  155.             { Stencil_Square ((int)i*16,(int)k*32,16,16);
  156.               Delay(1L);
  157.             }
  158.           for (i=XSquares-1; i>=0; i--)
  159.             { Stencil_Square ((int)i*16,((int)k*32)+16,16,16);
  160.               Delay(1L);
  161.             }
  162.         }
  163.  
  164.     FadeOut24 (200L);
  165.     CloseScreen24 ();
  166.     CloseLibrary ((struct Library *)OpalBase);
  167. }
  168.  
  169. void Stencil_Square (int x,int y,int w,int h)
  170. {
  171.    register int i,j;
  172.  
  173.     w = w + x;
  174.     h = h + y;
  175.     for (j=y; j<h; j++)
  176.         for (i=x; i<w; i++)
  177.             WritePFPixel24 (OScrn,i,j);
  178. }
  179.  
  180.  
  181.  
  182.  
  183.